package com.sun.filesigndemo.common.conf;

import com.sun.filesigndemo.common.utils.PropertiesLoader;

public class Global {
    /**
     * 当前对象实例
     */
    private static volatile Global global ;

    /**
     * 属性文件加载对象
     */
    private static PropertiesLoader loader = new PropertiesLoader("application.yml");

    /**
     * 获取当前对象实例
     */
    public static Global getInstance() {
        if (global == null) {
            synchronized (Global.class) {
                if (global == null) {
                    global = new Global();
                }
            }
        }
        return global;
    }

    /**
     * 获取配置
     */
    public static String get(String key) {
        return loader.getProperty(key);
    }

    /**
     * 获取配置, 如果是空的返回默认值
     */
    public static String get(String key, String def) {
        return loader.getProperty(key, def);
    }

    public static Integer getInteger(String key) {
        return loader.getInteger(key);
    }

    /**
     * 取出Integer类型的Property，但以System的Property优先.如果都为Null则返回Default值，如果内容错误则抛出异常
     */
    public static Integer getInteger(String key, Integer defaultValue) {
        return loader.getInteger(key, defaultValue);
    }

    /**
     * 取出Double类型的Property，但以System的Property优先.如果都为Null或内容错误则抛出异常.
     */
    public static Double getDouble(String key) {
        return loader.getDouble(key);
    }

    /**
     * 取出Double类型的Property，但以System的Property优先.如果都为Null则返回Default值，如果内容错误则抛出异常
     */
    public static Double getDouble(String key, Integer defaultValue) {
        return loader.getDouble(key, defaultValue);
    }

    /**
     * 取出Double类型的Property，但以System的Property优先.如果都为Null或内容错误则抛出异常.
     */
    public static Long getLong(String key) {
        return loader.getLong(key);
    }

    /**
     * 取出Double类型的Property，但以System的Property优先.如果都为Null则返回Default值，如果内容错误则抛出异常
     */
    public static Long getLong(String key, Integer defaultValue) {
        return loader.getLong(key, defaultValue);
    }

    /**
     * 取出Boolean类型的Property，但以System的Property优先.如果都为Null抛出异常,如果内容不是true/false则返回false.
     */
    public static Boolean getBoolean(String key) {
        return loader.getBoolean(key);
    }

    /**
     * 取出Boolean类型的Property，但以System的Property优先.如果都为Null则返回Default值,如果内容不为true/false则返回false.
     */
    public static Boolean getBoolean(String key, boolean defaultValue) {
        return loader.getBoolean(key, defaultValue);
    }
}
